﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Joel.Vishnu.Presentacion.Vistas;
using Joel.Vishnu.Presentacion;
using Joel.Vishnu.Modelo.Entidades;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;

namespace Joel.Vishnu.SitioWeb
{
    public partial class GestionarFacturas : System.Web.UI.Page, IGestionarFacturas
    {
        #region Atributos

        private GestionarFacturasPresentador presentador;

        #endregion

        #region Propiedades

        public Int32 ClienteId
        {
            get { return Convert.ToInt32(ddClientes.SelectedValue); }
        }

        public List<Cliente> ListaClientes
        {
            set
            {
                ddClientes.DataSource = value;
                ddClientes.DataValueField = "Id";
                ddClientes.DataTextField = "ApellidoNombre";
                ddClientes.DataBind();
            }
        }

        public Int32 EmpleadoId
        {
            get { return Convert.ToInt32(ddEmpleados.SelectedValue); }
        }

        public List<Empleado> ListaEmpleados
        {
            set
            {
                ddEmpleados.DataSource = value;
                ddEmpleados.DataValueField = "Id";
                ddEmpleados.DataTextField = "ApellidoNombre";
                ddEmpleados.DataBind();
            }
        }

        public Int32 ProductoId
        {
            get { return Convert.ToInt32(ddProductos.SelectedValue); }
        }

        public List<Producto> ListaProductos
        {
            set
            {
                ddProductos.DataSource = value;
                ddProductos.DataValueField = "Id";
                ddProductos.DataTextField = "Nombre";
                ddProductos.DataBind();
            }
        }

        public Int32 Cantidad
        {
            get
            {
                return Convert.ToInt32(txtCantidad.Text);
            }
            set
            {
                txtCantidad.Text = Convert.ToString(value); ;
            }
        }

        public List<FacturaDetalle> ListaFacturaDetalles
        {
            get
            {
                List<FacturaDetalle> lista = new List<FacturaDetalle>();
                for (int i = 0; i < grdFacturaDetalles.Rows.Count; i++)
                {
                    FacturaDetalle detalle = new FacturaDetalle();
                    lblProductoId.Text = grdFacturaDetalles.Rows[i].Cells[5].Text;
                    detalle.Producto = presentador.TraerProductoPorId(Convert.ToInt32(lblProductoId.Text));

                    //detalle.Producto = new Producto();
                    //SqlConnection cn = new SqlConnection("Data Source=(local);Initial Catalog=Vishnu;Integrated Security=True");
                    //SqlCommand cm = new SqlCommand();
                    //try
                    //{
                    //    cm.Connection = cn;
                    //    cn.Open();
                    //    String cs ="SELECT * FROM Productos WHERE Nombre = '"
                    //        + grdFacturaDetalles.Rows[i].Cells[1].Text
                    //        + "'";
                    //    cm.CommandText = cs;
                    //    SqlDataReader dr = cm.ExecuteReader();
                    //    while (dr.Read())
                    //    {
                    //        detalle.Producto.Id = dr.GetInt32(dr.GetOrdinal("ProductoId"));
                    //        detalle.Producto.Nombre = dr.GetString(dr.GetOrdinal("Nombre"));
                    //        detalle.Producto.Observacion = dr.GetString(dr.GetOrdinal("Observacion"));
                    //        detalle.Producto.PrecioLista = dr.GetDecimal(dr.GetOrdinal("PrecioLista"));
                    //        detalle.Producto.PrecioDistribuidor = dr.GetDecimal(dr.GetOrdinal("PrecioDistribuidor"));
                    //        detalle.Producto.ProductoSubCategoria = new ProductoSubCategoria();
                    //        detalle.Producto.ProductoSubCategoria.Id = dr.GetInt32(dr.GetOrdinal("ProductoSubCategoriaId"));
                    //    }
                    //    //ProductoId, Nombre, Observacion, PrecioLista, PrecioDistribuidor, ProductoSubCategoriaId
                    //}
                    //catch (Exception ex)
                    //{
                    //    lblErrores.Text = ex.Message;
                    //}
                    //finally
                    //{
                    //    if (cm.Connection.State == ConnectionState.Open)
                    //        cm.Connection.Close();
                    //}
                    //detalle.Producto.Nombre = grdFacturaDetalles.Rows[i].Cells[1].Text.ToString();
                    detalle.Precio = Convert.ToDecimal(grdFacturaDetalles.Rows[i].Cells[2].Text.Replace("$", ""));
                    detalle.Cantidad = Convert.ToInt32(grdFacturaDetalles.Rows[i].Cells[3].Text);
                    lista.Add(detalle);
                }
                return lista;
            }
            set
            {
                grdFacturaDetalles.DataSource = value;
                grdFacturaDetalles.DataBind();
            }
        }

        public String SubTotal
        {
            set { txtSubtotal.Text = value; }
        }

        public String Iva
        {
            get
            {
                return txtIva.Text;
            }
            set
            {
                txtIva.Text = value;
            }
        }

        public String Total
        {
            set { txtTotal.Text = value; }
        }

        public Int32 IndiceFacturaDetalleSeleccionada
        {
            get { return grdFacturaDetalles.SelectedIndex; }
        }

        #endregion

        #region Metodos

        private void LimpiarCampos()
        {
            ddProductos.SelectedIndex = 0;
            txtCantidad.Text = String.Empty;
            grdFacturaDetalles.DataSource = null;
            grdFacturaDetalles.DataBind();
            txtSubtotal.Text = String.Empty;
            txtIva.Text = String.Empty;
            txtTotal.Text = String.Empty;
        }

        private void LimpiarErrores()
        {
            lblErrores.Text = String.Empty;
        }

        private void DeseleccionarGrilla()
        {
            grdFacturaDetalles.SelectedIndex = -1;
        }

        #endregion

        #region Eventos

        protected void Page_Load(Object sender, EventArgs e)
        {
            try
            {
                presentador = new GestionarFacturasPresentador(this);
                if (!Page.IsPostBack)
                    presentador.Inicializar();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnAgregar_Click(Object sender, EventArgs e)
        {
            try
            {
                LimpiarErrores();
                DeseleccionarGrilla();
                presentador.AgregarDetalle();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        protected void btnRemover_Click(Object sender, EventArgs e)
        {
            if (grdFacturaDetalles.SelectedRow != null)
            {
                try
                {
                    LimpiarErrores();
                    presentador.RemoverDetalle();
                }
                catch (Exception ex)
                {
                    lblErrores.Text = ex.Message;
                }
            }
            else
                lblErrores.Text = "Debe seleccionar un detalle.";
        }

        protected void btnGestionar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Gestionar();
                LimpiarCampos();
            }
            catch (Exception ex)
            {
                lblErrores.Text = ex.Message;
            }
        }

        #endregion
    }
}